(in-package :TRAPS)
; Generated from #P"macintosh-hd:hd3:CInterface Translator:Source Interfaces:port.h"
; at Sunday July 2,2006 7:24:03 pm.
; 
;  * port.h 
;  *
;  * FUNCTION:
;  * This file contains defines for porting the tubing toolkit from GL to
;  * OpenGL to some callback scheme.
;  *
;  * HISTORY:
;  * Created by Linas Vepstas --  February 1993
;  * Added auto texture coord generation hacks, Linas April 1994 
;  
; #ifndef __GLE_PORT_H__
; #define __GLE_PORT_H__
; #ifndef TRUE
#| #|
#define TRUE 1
#endif
|#
 |#
; #ifndef FALSE
(defconstant $FALSE 0)
; #define FALSE 0

; #endif

; #ifndef M_PI
(defconstant $M_PI 3.141592653589793)
; #define M_PI 3.14159265358979323846

; #endif

;  ====================================================== 
;  Some compilers can't handle multiply-subscripted array's 
; #ifdef FUNKY_C
#| #|
typedef gleDouble gleVector;
#define AVAL(arr,n,i,j)  arr(6*n+3*i+j)
#define VVAL(arr,n,i)  arr(3*n+i)

|#
 |#

; #else  /* FUNKY_C */
(defrecord gleVector
   (contents (:array :double-float 3))
)
(defrecord glePoint
   (contents (:array :double-float 2))
)
; #define AVAL(arr,n,i,j)  arr[n][i][j]
; #define VVAL(arr,n,i)  arr[n][i];

; #endif /* FUNKY_C */

;  ====================================================== 
;  These are used to convey info about topography to the 
;  * texture mapping routines 
(defconstant $FRONT 1)
; #define FRONT 		1
(defconstant $BACK 2)
; #define BACK 		2
(defconstant $FRONT_CAP 3)
; #define FRONT_CAP 	3
(defconstant $BACK_CAP 4)
; #define BACK_CAP	4
(defconstant $FILLET 5)
; #define FILLET		5
;  ====================================================== 
; #define __GLE_DOUBLE
;  ====================================================== 
; #ifdef __GLE_DOUBLE
; #define gleDouble 		double
; #define urot_axis(a,b,c) 	urot_axis_d(a,b,c)
; #define uview_direction(a,b,c) 	uview_direction_d(a,b,c)
; #define uviewpoint(a,b,c,d) 	uviewpoint_d(a,b,c,d)
; #define MULTMATRIX(m)		MULTMATRIX_D(m)
; #define LOADMATRIX(m)		LOADMATRIX_D(m)
; #define V3F(x,j,id)		V3F_D(x,j,id)
; #define N3F(x)			N3F_D(x)
; #define T2F(x,y)		T2F_D(x,y)
#| 
; #else 
; #define gleDouble 		float
; #define urot_axis(a,b,c) 	urot_axis_f(a,b,c)
; #define uview_direction(a,b,c) 	uview_direction_f(a,b,c)
; #define uviewpoint(a,b,c,d) 	uviewpoint_f(a,b,c,d)
; #define MULTMATRIX(m)		MULTMATRIX_F(m)
; #define LOADMATRIX(m)		LOADMATRIX_F(m)
; #define V3F(x,j,id)		V3F_F(x,j,id)
; #define N3F(x)			N3F_F(x)
; #define T2F(x,y)		T2F_F(x,y)
 |#

; #endif 

;  ====================================================== 

; #if (defined DEBUG_GL_32 || DEBUG_OPENGL_10)
#| 
; #undef GL_32
; #undef OPENGL_10
; #define BGNTMESH(i,len)	printf ("bgntmesh() \n");
; #define ENDTMESH()      printf ("endtmesh() \n");
; #define BGNPOLYGON()	printf ("bgnpolygon() \n");
; #define ENDPOLYGON()	printf ("endpolygon() \n");
; #define V3F_F(x,j,id)	printf ("v3f(x)		%f %f %f \n", x[0], x[1], x[2]);
; #define V3F_D(x,j,id)	printf ("v3d(x) 	%f %f %f \n", x[0], x[1], x[2]);
; #define	N3F_F(x)	printf ("n3f(x) 	%f %f %f \n", x[0], x[1], x[2]);
; #define	N3F_D(x)	printf ("n3d(x)		%f %f %f \n", x[0], x[1], x[2]);
; #define	C3F(x)		printf ("c3f(x) 	%f %f %f \n", x[0], x[1], x[2]);
; #define	POPMATRIX()	printf ("popmatrix () \n");
; #define	PUSHMATRIX()	printf ("pushmatrix() \n");
; #define	MULTMATRIX_F(x)	MULTMATRIX_D(x)
; #define	LOADMATRIX_F(x)	LOADMATRIX_D(x)
; #define LOADMATRIX_D(x) {				   int i, j; 						   printf ("loadmatrix (x) \n");			   for (i=0; i<4; i++) {				      for (j=0; j<4; j++) {				         printf ( "%f ", x[i][j]);			      }							      printf (" \n");					   }							}
; #define MULTMATRIX_D(x) {				   int i, j; 						   printf ("multmatrix (x) \n");			   for (i=0; i<4; i++) {				      for (j=0; j<4; j++) {				         printf ( "%f ", x[i][j]);			      }							      printf (" \n");					   }							}
; #define __IS_LIGHTING_ON  (1)
 |#

; #endif

;  ====================================================== 
; #ifdef GL_32
#| #|

#include <glgl.h>

#define BGNTMESH(i,len)	bgntmesh()
#define ENDTMESH()	endtmesh()
#define BGNPOLYGON()	bgnpolygon()
#define ENDPOLYGON()	endpolygon()
#define V3F_F(x,j,id)	v3f(x)
#define V3F_D(x,j,id)	v3d(x)
#define N3F_F(x)	n3f(x)
#define T2F_F(x,y)
#define T2F_D(x,y)
#define C3F(x)		c3f(x)

#define POPMATRIX()	popmatrix ()
#define PUSHMATRIX()	pushmatrix()
#define MULTMATRIX_F(x)	multmatrix (x)
#define LOADMATRIX_F(x)	loadmatrix (x)

#define N3F_D(x) {					\
   float nnn[3];					\
   nnn[0] = (float) x[0]; 				\
   nnn[1] = (float) x[1]; 				\
   nnn[2] = (float) x[2]; 				\
   n3f (nnn);						\
}

#define LOADMATRIX_D(x) {				\
   int i, j; 						\
   float mmm[4][4];					\
   for (i=0; i<4; i++) {				\
      for (j=0; j<4; j++) {				\
         mmm[i][j] = (float) x[i][j];			\
      }							\
   }							\
   loadmatrix(mmm);					\
}

#define MULTMATRIX_D(x) {				\
   int i, j; 						\
   float mmm[4][4];					\
   for (i=0; i<4; i++) {				\
      for (j=0; j<4; j++) {				\
         mmm[i][j] = (float) x[i][j];			\
      }							\
   }							\
   multmatrix(mmm);					\
}


#define __IS_LIGHTING_ON  (extrusion_join_style & TUBE_LIGHTING_ON)

#endif
|#
 |#
;  GL_32 
;  ====================================================== 
; #ifdef OPENGL_10
#| #|

#ifdefined(_WIN32)
#include <windows.h>
#pragma warning (disable:4244)          
#endif#include <OpenGLgl.h>
#include <OpenGLglu.h>



#define C3F(x)		glColor3fv(x)
#define T2F_F(x,y)	glTexCoord2f(x,y)
#define T2F_D(x,y)	glTexCoord2d(x,y)

#define POPMATRIX()	glPopMatrix()
#define PUSHMATRIX()	glPushMatrix()

#define MULTMATRIX_F(x)	glMultMatrixf ((const GLfloat *)x)
#define LOADMATRIX_F(x)	glLoadMatrixf ((const GLfloat *)x)

#define MULTMATRIX_D(x)	glMultMatrixd ((const GLdouble *)x)
#define LOADMATRIX_D(x)	glLoadMatrixd ((const GLdouble *)x)

#define __IS_LIGHTING_ON  (glIsEnabled(GL_LIGHTING))


#ifdefAUTO_TEXTURE

#define BGNTMESH(i,len) { 					\
	if(_gle_gc -> bgn_gen_texture) (*(_gle_gc -> bgn_gen_texture))(i,len);\
	glBegin (GL_TRIANGLE_STRIP); 			\
}

#define BGNPOLYGON() { 					\
	if(_gle_gc -> bgn_gen_texture) (*(_gle_gc -> bgn_gen_texture))();\
	glBegin (GL_POLYGON);				\
}

#define N3F_F(x) { 					\
	if(_gle_gc -> n3f_gen_texture) (*(_gle_gc -> n3f_gen_texture))(x); \
	glNormal3fv(x); 				\
}

#define N3F_D(x) { 					\
	if(_gle_gc -> n3d_gen_texture) (*(_gle_gc -> n3d_gen_texture))(x); \
	glNormal3dv(x); 				\
}

#define V3F_F(x,j,id) { 					\
	if(_gle_gc -> v3f_gen_texture) (*(_gle_gc -> v3f_gen_texture))(x,j,id);\
	glVertex3fv(x); 				\
}

#define V3F_D(x,j,id) { 					\
	if(_gle_gc -> v3d_gen_texture) (*(_gle_gc -> v3d_gen_texture))(x,j,id); \
	glVertex3dv(x); 				\
}

#define ENDTMESH() {					\
	if(_gle_gc -> end_gen_texture) (*(_gle_gc -> end_gen_texture))(); \
	glEnd ();					\
}

#define ENDPOLYGON() {					\
	if(_gle_gc -> end_gen_texture) (*(_gle_gc -> end_gen_texture))(); \
	glEnd ();					\
}


#else

#define BGNTMESH(i,len)	glBegin (GL_TRIANGLE_STRIP);
#define BGNPOLYGON() 	glBegin (GL_POLYGON);

#define N3F_F(x)	glNormal3fv(x)
#define N3F_D(x)	glNormal3dv(x)
#define V3F_F(x,j,id)	glVertex3fv(x);
#define V3F_D(x,j,id)	glVertex3dv(x);

#define ENDTMESH()	glEnd ()
#define ENDPOLYGON()	glEnd()

#endif

#endif
|#
 |#
;  OPENGL_10 
;  ====================================================== 

; #endif /* __GLE_PORT_H__ */

;  ================== END OF FILE ======================= 

(provide-interface "port")